using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Collections.Generic;

namespace BibliotecaCorrector
{
    class ManejadorDiccionarios
    {
        private Diccionario dic;
        //Para generacion recurviva de sugerencias (cada vez mas fino)
        private int numLetras;
        //Constructor
        public ManejadorDiccionarios()
        {
            numLetras = 1;
        }
        //Procesa un fichero diccionario y lo guarda... devuelve 0 si todo ha ido
        //correctamente y 1 en caso contrario 
        public int leeDiccionario(String fichero)
        {
            string linea = "";
            StreamReader reader;
            try
            {
                reader = File.OpenText(fichero);
                //Creamos el nuevo diccionario
                dic = new Diccionario(fichero);
                //Leeemos linea
                while ((linea = reader.ReadLine()) != null)
                {
                    dic.agregarPalabra(linea);

                }
                // Cerramos fichero
                reader.Close();
            }
            catch (Exception e)
            {
                System.Console.WriteLine("No se ha podido procesar el diccionario", e);
                return 1;
            }
            return 0;
        }

        public Boolean existePalabra(String palabra)
        {
            return (dic.buscaPalabra(palabra));

        }

        //Metodo recursivo que va generando sugerencias que comiencen igual que la palabra
        //comienza buscando palabras que comiencen por la misma letra
        //va sumando el nuemro de letras que deben coincidir al principio para
        //reducir el numero de sugerencias
        public LinkedList<String> generaSugerencias(String palabra){

            //Inicialmente buscamos palabras que comiencen por la misma letra
             LinkedList<String> sug =  dic.listaSugerencias(palabra.Substring(0,numLetras));
            if (sug.Count > 10)
            { //demasiadas sugerencias

                //Buscamos sugerencias que comiencen por las mismas numletras+1
                numLetras++;
                if (numLetras < palabra.Length)
                    sug = generaSugerencias(palabra);
                else
                {
                    numLetras = 1;
                    return sug;
                }

            }
            numLetras = 1; //lo inicializamos para la proxima
            return sug;

           

        }

    }

}


